/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package javaapplication2;

import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author sala_b
 */
public class AdminPartidas {
        ArrayList<Partida> partidas=new ArrayList<Partida>();
        ArrayList<ServidorThread> clientes=new ArrayList<ServidorThread>();
	int usuarios=0;

	public int getPartidas(){
            return this.partidas.size();
        }

        public void crearPartidas(int n){
            for(int i=0;i<n;i++){
                this.partidas.add(new Partida());
            }
        }

        public String selectPartidas(int i,int n){
            if(partidas.get(i).getJug()<4){
                
                partidas.get(i).addJug(buscarThread(n));
                if(partidas.get(i).getJug()==4){
                    this.arrancarPartida(i);
                }
                return "CONECTADO(s) "+partidas.get(i).getJug();
            }
            else
                return "PARTIDA LLENA LAG";
        }
        public void addCliente(ServidorThread Client){
            clientes.add(Client);
        }
        public void arrancarPartida(int i){

            
            try {
                Thread.sleep(10);
                System.out.print(".");
                Thread.sleep(10);
                System.out.print(".");
                Thread.sleep(10);
                System.out.print(".");
                Thread.sleep(10);
                System.out.print(".");
            } catch (InterruptedException ex) {
                Logger.getLogger(AdminPartidas.class.getName()).log(Level.SEVERE, null, ex);
            }

            partidas.get(i).jugar();
        }
        //asumo que el cliente siempre lo voy a encontrar en el arreglo sino esta
        //es porque se desconectó por lo tanto debo agregarlo.
        public ServidorThread buscarThread(int n){
            boolean found=false;
            int limSup=this.clientes.size();
            int limInf=0;

            int temp=this.clientes.size()/2;
            if(clientes.get(n).getNumThread()==n)
                return this.clientes.get(n);
            if(temp==0)
                return this.clientes.get(0);  
            else{
                while(!found){
                    if(clientes.get(n).getNumThread()>clientes.get(temp).getNumThread()){
                        limInf=temp;
                    }
                    else if(clientes.get(n).getNumThread()<clientes.get(temp).getNumThread()){
                        limSup=temp; 
                    }
                    else{
                        found=true;
                    }
                    temp=(limSup-limInf)/2;
                }
            }
            return clientes.get(temp);
        }


}
